package com.zmn.oms.common.constant;

import com.zmn.consts.GlobalConsts;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * 类描述：ruleId 平台节点映射关系
 *
 * @author yule
 * @date 2020/12/17 21:38
 */
public final class MessageRuleIdMapper {

    /**
     * 消息节点发送map
     */
    public static final Map<Integer, Map<Integer, Map<Integer, Integer>>> MESSAGE_RULE_ID_MAP = new HashMap<>();

    static {
        Map<Integer, Map<Integer, Integer>> map = null;

        // 确认节点未登入(原来是分单，现在改到确认节点了)
        map = new HashMap<>();
        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.ZMN_MSG_RULEID_ASSIGN_NO_LOGIN);
        }});
        map.put(GlobalConsts.PLAT_MARK_YEYX, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.YEYX_MSG_RULEID_ASSIGN_NO_LOGIN);
            put(GlobalConsts.YES, MessageRuleIdConsts.YEYX_MSG_RULEID_ASSIGN_NO_LOGIN);
        }});
        map.put(GlobalConsts.PLAT_MARK_SAAS, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.SAAS_MSG_RULEID_ASSIGN_NO_LOGIN);
        }});
        map.put(GlobalConsts.PLAT_MARK_CNHB, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.CNHB_MSG_RULEID_ASSIGN);// 川南暂时没有未登入状态
        }});
        MESSAGE_RULE_ID_MAP.put(MessageRuleIdConsts.MESSAGE_GLOBAL_CONFIRM_NO_LOGIN_NODE_MARK, map);

        // 确认节点已登入(原来是分单，现在改到确认节点了)
        map = new HashMap<>();
        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.ZMN_MSG_RULEID_ASSIGN);
        }});
        map.put(GlobalConsts.PLAT_MARK_YEYX, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.YEYX_MSG_RULEID_ASSIGN_TYPE_OUT);
            put(GlobalConsts.YES, MessageRuleIdConsts.YEYX_MSG_RULEID_ASSIGN_TYPE_IN);
        }});
        map.put(GlobalConsts.PLAT_MARK_SAAS, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.SAAS_MSG_RULEID_ASSIGN);
        }});
        map.put(GlobalConsts.PLAT_MARK_CNHB, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.CNHB_MSG_RULEID_ASSIGN);
        }});
        MESSAGE_RULE_ID_MAP.put(OrderLogConsts.ORDER_LOG_TYPE_CONFIRM, map);

        // 工程师领单节点
        map = new HashMap<>();
        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.ZMN_MSG_RULEID_TAKE);
        }});
        map.put(GlobalConsts.PLAT_MARK_YEYX, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.YEYX_MSG_RULEID_TAKE_TYPE_OUT);
            put(GlobalConsts.YES, MessageRuleIdConsts.YEYX_MSG_RULEID_TAKE_TYPE_IN);
        }});
        map.put(GlobalConsts.PLAT_MARK_SAAS, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.SAAS_MSG_RULEID_TAKE);
        }});
        map.put(GlobalConsts.PLAT_MARK_CNHB, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.CNHB_MSG_RULEID_TAKE);
        }});
        MESSAGE_RULE_ID_MAP.put(OrderLogConsts.ORDER_LOG_TYPE_TAKE, map);

        // 改派后工程师领单节点
        map = new HashMap<>();
        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.ZMN_MSG_RULEID_RETAKE);
        }});
        map.put(GlobalConsts.PLAT_MARK_YEYX, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.YEYX_MSG_RULEID_RETAKE);
            put(GlobalConsts.YES, MessageConsts.YEYX_MSG_RULEID_RETAKE);
        }});
        map.put(GlobalConsts.PLAT_MARK_CNHB, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.CNHB_MSG_RULEID_RETAKE);
        }});
        MESSAGE_RULE_ID_MAP.put(MessageRuleIdConsts.MESSAGE_GLOBAL_RETAKE_NODE_MARK, map);

        // 工程师上门节点
        map = new HashMap<>();
        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.ZMN_MSG_RULEID_MASTER_VISIT);
        }});
        map.put(GlobalConsts.PLAT_MARK_YEYX, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, 0);
            put(GlobalConsts.YES, MessageRuleIdConsts.YEYX_MSG_RULEID_MASTER_VISIT_TYPE_IN);
        }});
        map.put(GlobalConsts.PLAT_MARK_SAAS, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.SAAS_MSG_RULEID_MASTER_VISIT);
        }});
        map.put(GlobalConsts.PLAT_MARK_CNHB, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.CNHB_MSG_RULEID_MASTER_VISIT);
        }});
        MESSAGE_RULE_ID_MAP.put(OrderLogConsts.ORDER_LOG_TYPE_VISIT, map);

        // 工单完成节点
        map = new HashMap<>();
        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.ZMN_MSG_RULEID_COMPLETE);
        }});
        map.put(GlobalConsts.PLAT_MARK_YEYX, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.YEYX_MSG_RULEID_COMPLETE_TYPE_OUT);
            put(GlobalConsts.YES, MessageRuleIdConsts.YEYX_MSG_RULEID_COMPLETE_TYPE_IN);
        }});
        map.put(GlobalConsts.PLAT_MARK_SAAS, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.SAAS_MSG_RULEID_COMPLETE);
        }});
        map.put(GlobalConsts.PLAT_MARK_CNHB, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.CNHB_MSG_RULEID_COMPLETE);
        }});
        MESSAGE_RULE_ID_MAP.put(OrderLogConsts.ORDER_LOG_TYPE_COMPLETE, map);

        // 工单取消节点
        map = new HashMap<>();
        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.ZMN_MSG_RULEID_CANCEL);
        }});
        map.put(GlobalConsts.PLAT_MARK_YEYX, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.YEYX_MSG_RULEID_CANCEL_TYPE_OUT);
            put(GlobalConsts.YES, MessageRuleIdConsts.YEYX_MSG_RULEID_CANCEL_TYPE_IN);
        }});
        map.put(GlobalConsts.PLAT_MARK_SAAS, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.SAAS_MSG_RULEID_CANCEL);
        }});
        map.put(GlobalConsts.PLAT_MARK_CNHB, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageRuleIdConsts.CNHB_MSG_RULEID_CANCEL);
        }});
        MESSAGE_RULE_ID_MAP.put(OrderLogConsts.ORDER_LOG_TYPE_CANCEL, map);

        // 保修卡节点
//        map = new HashMap<>();
//        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
//            put(GlobalConsts.NO, MessageRuleIdConsts.ZMN_MSG_RULEID_WARRANTY_CARD);
//        }});
//        map.put(GlobalConsts.PLAT_MARK_YEYX, new HashMap<Integer, Integer>() {{
//            put(GlobalConsts.NO, MessageRuleIdConsts.YEYX_MSG_RULEID_WARRANTY_CARD_TYPE_IN);
//            put(GlobalConsts.YES, 0);
//        }});
//        map.put(GlobalConsts.PLAT_MARK_SAAS, new HashMap<Integer, Integer>() {{
//            put(GlobalConsts.NO, 0);
//        }});
//        map.put(GlobalConsts.PLAT_MARK_CNHB, new HashMap<Integer, Integer>() {{
//            put(GlobalConsts.NO, MessageRuleIdConsts.CNHB_MSG_RULEID_WARRANTY_CARD);
//        }});
//        MESSAGE_RULE_ID_MAP.put(OrderLogConsts.ORDER_LOG_TYPE_WARRANTY, map);
//
//        //  订单保修卡延保节点
//        map = new HashMap<>();
//        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
//            put(GlobalConsts.NO, MessageRuleIdConsts.ZMN_MSG_RULEID_WARRANTY_CARD_ADD);
//        }});
//        MESSAGE_RULE_ID_MAP.put(OrderLogConsts.ORDER_LOG_TYPE_UPDATE_WARRANTY, map);

        map = new HashMap<>();
        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.ZMN_MSG_RULEID_SERVICE_REFUND_SUCCESS);
            put(GlobalConsts.YES, MessageConsts.ZMN_MSG_RULEID_SERVICE_REFUND_SUCCESS);
        }});
        map.put(GlobalConsts.PLAT_MARK_YEYX, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.ZMN_MSG_RULEID_SERVICE_REFUND_SUCCESS);
            put(GlobalConsts.YES, MessageConsts.ZMN_MSG_RULEID_SERVICE_REFUND_SUCCESS);
        }});
        map.put(GlobalConsts.PLAT_MARK_SAAS, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.ZMN_MSG_RULEID_SERVICE_REFUND_SUCCESS);
            put(GlobalConsts.YES, MessageConsts.ZMN_MSG_RULEID_SERVICE_REFUND_SUCCESS);
        }});
        map.put(GlobalConsts.PLAT_MARK_CNHB, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.ZMN_MSG_RULEID_SERVICE_REFUND_SUCCESS);
            put(GlobalConsts.YES, MessageConsts.ZMN_MSG_RULEID_SERVICE_REFUND_SUCCESS);
        }});
        MESSAGE_RULE_ID_MAP.put(OrderLogConsts.ORDER_LOG_TYPE_REFUND_RESULT, map);

        // 改约节点
        map = new HashMap<>();
        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.ZMN_MSG_RULEID_UPDATE_DUTYTIME);
            put(GlobalConsts.YES, MessageConsts.ZMN_MSG_RULEID_UPDATE_DUTYTIME);
        }});
        MESSAGE_RULE_ID_MAP.put(MessageRuleIdConsts.MESSAGE_GLOBAL_UPDATE_DUTYTIME_NODE_MARK, map);

        // 迟到安抚（上门迟到）
        map = new HashMap<>();
        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.ZMN_MSG_RULEID_VISIT_TIME_OUT);
            put(GlobalConsts.YES, MessageConsts.ZMN_MSG_RULEID_VISIT_TIME_OUT);
        }});
        MESSAGE_RULE_ID_MAP.put(MessageRuleIdConsts.MESSAGE_GLOBAL_VISIT_TIME_OUT_NODE_MARK, map);

        // 派单超时确认短信
        map = new HashMap<>();
        map.put(GlobalConsts.PLAT_MARK_ZMN, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.ZMN_MSG_RULEID_DISTRIBUTE_TIMEOUT_CONFIRM);
            put(GlobalConsts.YES, MessageConsts.ZMN_MSG_RULEID_DISTRIBUTE_TIMEOUT_CONFIRM);
        }});
        map.put(GlobalConsts.PLAT_MARK_YEYX, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.ZMN_MSG_RULEID_DISTRIBUTE_TIMEOUT_CONFIRM);
            put(GlobalConsts.YES, MessageConsts.ZMN_MSG_RULEID_DISTRIBUTE_TIMEOUT_CONFIRM);
        }});
        map.put(GlobalConsts.PLAT_MARK_SAAS, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.ZMN_MSG_RULEID_DISTRIBUTE_TIMEOUT_CONFIRM);
            put(GlobalConsts.YES, MessageConsts.ZMN_MSG_RULEID_DISTRIBUTE_TIMEOUT_CONFIRM);
        }});
        map.put(GlobalConsts.PLAT_MARK_CNHB, new HashMap<Integer, Integer>() {{
            put(GlobalConsts.NO, MessageConsts.ZMN_MSG_RULEID_DISTRIBUTE_TIMEOUT_CONFIRM);
            put(GlobalConsts.YES, MessageConsts.ZMN_MSG_RULEID_DISTRIBUTE_TIMEOUT_CONFIRM);
        }});
        MESSAGE_RULE_ID_MAP.put(MessageConsts.ZMN_MSG_RULEID_DISTRIBUTE_TIMEOUT_CONFIRM, map);

    }

    /**
     * 获取RuleId
     *
     * @param nodeMark
     * @param plat
     * @return
     */
    public static int getMessageRuleId(Integer nodeMark, Integer plat, Integer bizType) {
        // 1保外 2保内
        if (Objects.equals(bizType, com.zmn.consts.GlobalConsts.BIZ_TYPE_F) && Objects.equals(GlobalConsts.PLAT_MARK_YEYX, plat)) {
            bizType = GlobalConsts.YES;
        } else {
            bizType = GlobalConsts.NO;
        }

        Map<Integer, Map<Integer, Integer>> platMap = MESSAGE_RULE_ID_MAP.get(nodeMark);
        if (platMap == null) {
            return GlobalConsts.NONE;
        }
        Map<Integer, Integer> messageRule = platMap.get(plat);

        if (messageRule == null) {
            return GlobalConsts.NONE;
        }

        Integer RuleId = messageRule.get(bizType);
        if (RuleId == null) {
            return GlobalConsts.NONE;
        }

        return RuleId;
    }
}
